import os
import sys

from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_core.messages import HumanMessage
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import chat_agent_executor

# 添加项目根目录到Python路径
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))

# 导入配置读取器
from config_reader import get_tavily_api_key, get_langsmith_config

# 从配置文件获取API密钥
try:
    tavily_api_key = get_tavily_api_key()
    langsmith_config = get_langsmith_config()

    # 设置环境变量
    os.environ["TAVILY_API_KEY"] = tavily_api_key
    os.environ["LANGCHAIN_TRACING_V2"] = langsmith_config['tracing_v2']
    os.environ["LANGCHAIN_PROJECT"] = langsmith_config['project']
    if langsmith_config['api_key']:
        os.environ["LANGCHAIN_API_KEY"] = langsmith_config['api_key']

except Exception as e:
    print(f"配置错误：{e}")
    exit(1)

# 聊天机器人案例
# 创建模型
model = ChatOpenAI(model='gpt-4o-mini')

# 没有任何代理的情况下
# result = model.invoke([HumanMessage(content='北京天气怎么样？')])
# print(result)

# LangChain内置了一个工具，可以轻松地使用Tavily搜索引擎作为工具。
search = TavilySearchResults(max_results=2)  # max_results: 只返回两个结果
# print(search.invoke('北京的天气怎么样？'))

# 让模型绑定工具
tools = [search]
# model_with_tools = model.bind_tools(tools)

# 模型可以自动推理：是否需要调用工具去完成用户的答案
# resp = model_with_tools.invoke([HumanMessage(content='中国的首都是哪个城市？')])
#
# print(f'Model_Result_Content: {resp.content}')
# print(f'Tools_Result_Content: {resp.tool_calls}')
#
# resp2 = model_with_tools.invoke([HumanMessage(content='北京天气怎么样？')])
#
# print(f'Model_Result_Content: {resp2.content}')
# print(f'Tools_Result_Content: {resp2.tool_calls}')

#  创建代理

agent_executor = chat_agent_executor.create_tool_calling_executor(model, tools)

resp = agent_executor.invoke({'messages': [HumanMessage(content='中国的首都是哪个城市？')]})
print(resp['messages'])

resp2 = agent_executor.invoke({'messages': [HumanMessage(content='北京天气怎么样？')]})
print(resp2['messages'])

print(resp2['messages'][2].content)
